/**
@file     	Monitor.h
@brief    	all kinds of Monitor
@author  	arvin
@version 	1.0   2012/12/14
*/

#ifndef CXX_MONITOR_H
#define CXX_MONITOR_H
#include "ProductDef.h"

class Monitor
{
public:

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~Monitor() = 0;

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation() = 0;

	/**
	* GetManufacturer
	*
	* @param VOID
	* @return MANUFACTURER_TYPE
	*/
	MANUFACTURER_TYPE GetManufacturer();

protected:
	/**
	* Construction
	*
	* @param MANUFACTURER_TYPE eManufacturer
	* @return
	*/
	Monitor(MANUFACTURER_TYPE eManufacturer);

	/**
	* SetManufacturer
	*
	* @param MANUFACTURER_TYPE eManufacturer
	* @return
	*/
	VOID SetManufacturer(MANUFACTURER_TYPE eManufacturer);
private:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	Monitor();

	/**
	* Copy Construction
	*
	* @param const Monitor& cMonitor
	* @return
	*/
	Monitor(const Monitor& cMonitor);

	/**
	* Assignment
	*
	* @param const Monitor& cMonitor
	* @return Monitor&
	*/
	Monitor& operator=(const Monitor& cMonitor);

public:
protected:
private:
	MANUFACTURER_TYPE m_eManufacturer;
};

class DELLMonitor : public Monitor
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	DELLMonitor();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~DELLMonitor();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const DELLMonitor& cASUSMonitor
	* @return
	*/
	DELLMonitor(const DELLMonitor& cDELLMonitor);

	/**
	* Assignment
	*
	* @param const DELLMonitor& cASUSMonitor
	* @return DELLMonitor&
	*/
	DELLMonitor& operator=(const DELLMonitor& cDELLMonitor);

public:
protected:
private:
};

class ASUSMonitor : public Monitor
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	ASUSMonitor();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~ASUSMonitor();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const ASUSMonitor& cASUSMonitor
	* @return
	*/
	ASUSMonitor(const ASUSMonitor& cASUSMonitor);

	/**
	* Assignment
	*
	* @param const ASUSMonitor& cASUSMonitor
	* @return ASUSMonitor&
	*/
	ASUSMonitor& operator=(const ASUSMonitor& cASUSMonitor);

public:
protected:
private:
};

class HPMonitor : public Monitor
{
public:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	HPMonitor();

	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	virtual ~HPMonitor();

	/**
	* Operation
	*
	* @param VOID
	* @return
	*/
	virtual VOID Operation();

protected:
private:

	/**
	* Copy Construction
	*
	* @param const HPMonitor& cHPMonitor
	* @return
	*/
	HPMonitor(const HPMonitor& cHPMonitor);

	/**
	* Assignment
	*
	* @param const HPMonitor& cHPMonitor
	* @return HPMonitor&
	*/
	HPMonitor& operator=(const HPMonitor& cHPMonitor);

public:
protected:
private:
};


#endif	/* >>CXX_MONITOR_H<< */
/* EOF */